home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / graphics / tree / unpar.l < prev    next >
Text File  |  1993-09-01  |  2KB  |  159 lines

  1. %{
  2. /*
  3.  * unpar.l: substitute indentation for parenthesization.
  4.  * Version 0.1
  5.  * (unpar recognizes some \tree definitions as correct which tree
  6.  *  rejects.)
  7.  *             -- Greg Lee, lee@uhccux.uhcc.hawaii.edu, 6/24/90
  8.  */
  9. #define TRUE 1
  10. #define FALSE 0
  11. int tex_opt = FALSE;
  12. int level = 0;
  13. int havename = 0;
  14. int wait = 0;
  15. int i;
  16. %}
  17.  
  18. %s T X C
  19.  
  20. %%
  21.  
  22. ^".tr" {
  23.     printf("\\tree");
  24.     havename = 1;
  25.     BEGIN(T);
  26. }
  27.  
  28. \\tree[ \t]*(-([tuvLTOIFER]+|[bg][0-9]+)[ \t]*)* {
  29.     ECHO;
  30.     havename = 1;
  31.     if (tex_opt) BEGIN(X);
  32.     else BEGIN(T);
  33. }
  34.  
  35. <T,X>^[ \t]+    ;
  36. <T,X>[ \t]+$    ;
  37.  
  38. <T,X>\n    ;
  39.  
  40. <T,X>\\\( {
  41.     havename = 1;
  42.     ECHO;
  43. }
  44. <T,X>[^ \t\n\(\)]/\( {
  45.     havename = 1;
  46.     ECHO;
  47.     putchar(' ');
  48. }
  49. <T,X>"("([^\)\(]|\\\)|\\\()+"("([^\)\(]|\\\)|\\\()+")"([^\)\(]|\\\)|\\\()*")" {
  50.     wait = 2;
  51.     REJECT;
  52. }
  53. <T,X>"("[ \t\n]* {
  54.     level++;
  55.     if (wait == 1) printf(" - ");
  56.     else {
  57.         if (!havename) printf("\\Z\n");
  58.         else putchar('\n');
  59.         indent();
  60.     }
  61.     havename = 0;
  62.     if (wait) wait--;
  63. }
  64. <T,X>")"[^\)\(]+ {
  65.     if (level == 1) {REJECT;}
  66.     else level--;
  67. }
  68. <T,X>")" {
  69.     level--;
  70.     if (!level) {
  71.         printf("\n");
  72.         BEGIN(0);
  73.     }
  74. }
  75. <X>\$_[0-9ijkxyz]\$ {
  76.     havename = 1;
  77.     printf("[%c]", yytext[2]);
  78. }
  79. <X>\$\\overline\{\\rm\ [NAVP]\}\$ {
  80.     havename = 1;
  81.     printf(" %c'", yytext[15]);
  82. }
  83. <T,X>\\[%\(\)] {
  84.     havename = 1;
  85.     ECHO;
  86. }
  87. <T,X>% {
  88.     BEGIN(C);
  89. }
  90. <C>\n {
  91.     if (tex_opt) BEGIN(X);
  92.     else BEGIN(T);
  93. }
  94. <C>. ;
  95. <T,X>. {
  96.     havename = 1;
  97.     ECHO;
  98. }
  99.  
  100. %%
  101.  
  102. indent()
  103. {    int i;
  104.  
  105.     for (i = 0; i < 2*(level-1); i++) putchar(' ');
  106. }
  107.  
  108. extern char *optarg;        /* from getopt */
  109. extern int  optind;
  110.  
  111. main(argc, argv)
  112. int     argc;
  113. char   *argv[];
  114. {    int c;
  115.     char *progname = NULL, *basename();
  116.  
  117.     progname = basename (argv[0]);
  118.     while ((c = getopt (argc, argv, "ht")) != EOF)
  119.         switch (c) {
  120.             case 't': tex_opt = TRUE; break;
  121.             case 'h':
  122.                 default: 
  123.            fprintf(stderr, "Usage: %s [options] [files]\n", progname);
  124.            fprintf(stderr, "options = -t\t(remove TeX code)\n");
  125.            fprintf(stderr, "          -h\t(print this information)\n");
  126.            exit(1);
  127.         }
  128.  
  129.     if (optind >= argc) {
  130.         (void) yylex ();
  131.     }
  132.     else for (; (optind < argc); optind++) {
  133.         if (yyin == NULL) yyin = stdin;
  134.         if (freopen (argv[optind], "r", stdin) != NULL) {
  135. #ifdef FLEX_SCANNER    
  136.             /* to get flex to look at > 1 file */
  137.             yy_init = 1;
  138. #endif
  139.             (void) yylex ();
  140.         }
  141.         else {
  142.             (void) fprintf (stderr,
  143.                 "Couldn't open file: %s\n", argv[optind]);
  144.             exit (1);
  145.         }
  146.     }
  147. }
  148.  
  149.  
  150. char   *basename (s)
  151. char   *s;
  152. {
  153.     char   *p, *strrchr();
  154.  
  155.     if (p = strrchr(s, '/'))
  156.         return(++p);
  157.     else return(s);
  158. }
  159.